library(readxl)
library(mosaic)
library(tidyverse)
library(tibble)
library(matrixStats)

Attaching package: ‘matrixStats’

The following objects are masked from ‘package:mosaic’:

    count, iqr

The following object is masked from ‘package:dplyr’:

    count
Shipments <- read_excel("Shipments.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
NewOrders <- read_excel("NewOrders.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
UnfilledOrders <- read_excel("UnfilledOrders.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
TotalInventories <- read_excel("TotalInventories.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
InventoriesToShipments <- read_excel("InventoriesToShipments.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
UnfilledOrdersToShipments <- read_excel("UnfilledOrdersToShipments.xls", col_names = FALSE)
New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5
* ...
shipments_industry_code_list <- as.array(unique(Shipments$...1))
shipments_dataframe <- tibble(.rows = 360)
for (i in 1:length(shipments_industry_code_list))
{
  current_code <- shipments_industry_code_list[i]
  current_industry <- Shipments %>% filter(Shipments$...1 == current_code, Shipments$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    shipments_dataframe[j,i] = current_industry_transpose[j]
  }
  shipments_dataframe[i] <- sapply(shipments_dataframe[i],as.numeric)
}
colnames(shipments_dataframe) = shipments_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
shipments_dataframe_time <- shipments_dataframe %>% add_column(Date = dates2)
head(shipments_dataframe_time,12)
neworders_industry_code_list <- as.array(unique(NewOrders$...1))
neworders_dataframe <- tibble(.rows = 360)
for (i in 1:length(neworders_industry_code_list))
{
  current_code <- neworders_industry_code_list[i]
  current_industry <- NewOrders %>% filter(NewOrders$...1 == current_code, NewOrders$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    neworders_dataframe[j,i] = current_industry_transpose[j]
  }
  neworders_dataframe[i] <- sapply(neworders_dataframe[i],as.numeric)
}
colnames(neworders_dataframe) = neworders_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
neworders_dataframe_time <- neworders_dataframe %>% add_column(Date = dates2)
head(neworders_dataframe_time,12)
unfilledorders_industry_code_list <- as.array(unique(UnfilledOrders$...1))
unfilledorders_dataframe <- tibble(.rows = 360)
for (i in 1:length(unfilledorders_industry_code_list))
{
  current_code <- unfilledorders_industry_code_list[i]
  current_industry <- UnfilledOrders %>% filter(UnfilledOrders$...1 == current_code, UnfilledOrders$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    unfilledorders_dataframe[j,i] = current_industry_transpose[j]
  }
  unfilledorders_dataframe[i] <- sapply(unfilledorders_dataframe[i],as.numeric)
}
colnames(unfilledorders_dataframe) = unfilledorders_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
unfilledorders_dataframe_time <- unfilledorders_dataframe %>% add_column(Date = dates2)
head(unfilledorders_dataframe_time,12)
totalinventories_industry_code_list <- as.array(unique(TotalInventories$...1))
totalinventories_dataframe <- tibble(.rows = 360)
for (i in 1:length(totalinventories_industry_code_list))
{
  current_code <- totalinventories_industry_code_list[i]
  current_industry <- TotalInventories %>% filter(TotalInventories$...1 == current_code, TotalInventories$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    totalinventories_dataframe[j,i] = current_industry_transpose[j]
  }
  totalinventories_dataframe[i] <- sapply(totalinventories_dataframe[i],as.numeric)
}
colnames(totalinventories_dataframe) = totalinventories_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
totalinventories_dataframe_time <- totalinventories_dataframe %>% add_column(Date = dates2)
head(totalinventories_dataframe_time,12)
inventoriestoshipments_industry_code_list <- as.array(unique(InventoriesToShipments$...1))
inventoriestoshipments_dataframe <- tibble(.rows = 360)
for (i in 1:length(inventoriestoshipments_industry_code_list))
{
  current_code <- inventoriestoshipments_industry_code_list[i]
  current_industry <- InventoriesToShipments %>% filter(InventoriesToShipments$...1 == current_code, InventoriesToShipments$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    inventoriestoshipments_dataframe[j,i] = current_industry_transpose[j]
  }
  inventoriestoshipments_dataframe[i] <- sapply(inventoriestoshipments_dataframe[i],as.numeric)
}
colnames(inventoriestoshipments_dataframe) = inventoriestoshipments_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
inventoriestoshipments_dataframe_time <- inventoriestoshipments_dataframe %>% add_column(Date = dates2)
head(inventoriestoshipments_dataframe_time,12)
unfilledorderstoshipments_industry_code_list <- as.array(unique(UnfilledOrdersToShipments$...1))
unfilledorderstoshipments_dataframe <- tibble(.rows = 360)
for (i in 1:length(unfilledorderstoshipments_industry_code_list))
{
  current_code <- unfilledorderstoshipments_industry_code_list[i]
  current_industry <- UnfilledOrdersToShipments %>% filter(UnfilledOrdersToShipments$...1 == current_code, UnfilledOrdersToShipments$...2 != "2022") %>% select(3:14)
  current_industry_transpose <- as.list(t(current_industry))
  for (j in 1:length(current_industry_transpose))
  {
    unfilledorderstoshipments_dataframe[j,i] = current_industry_transpose[j]
  }
  unfilledorderstoshipments_dataframe[i] <- sapply(unfilledorderstoshipments_dataframe[i],as.numeric)
}
colnames(unfilledorderstoshipments_dataframe) = unfilledorderstoshipments_industry_code_list
dates <- seq(from = as.Date("1992/01/01"), to = as.Date("2021/12/01"), by = "months")
dates2 <- format(dates, "%m/%y")
unfilledorderstoshipments_dataframe_time <- unfilledorderstoshipments_dataframe %>% add_column(Date = dates2)
head(unfilledorderstoshipments_dataframe_time,12)
mean_row_ship <- colMeans(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_ship <- colMedians(as.matrix(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_ship <- colSds(as.matrix(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)]),na.rm = TRUE)
shipments_mmv1 <- shipments_dataframe_time %>% rbind(shipments_dataframe_time, mean_row_ship)
shipments_mmv2 <- shipments_mmv1 %>% rbind(shipments_mmv1, median_row_ship)
shipments_mmv <- shipments_mmv2 %>% rbind(shipments_mmv2, sd_row_ship)
shipments_mmv[nrow(shipments_mmv)-2,ncol(shipments_mmv)] <- "Mean"
shipments_mmv[nrow(shipments_mmv)-1,ncol(shipments_mmv)] <- "Median"
shipments_mmv[nrow(shipments_mmv),ncol(shipments_mmv)] <- "Standard Deviation"
tail(shipments_mmv,10)
mean_row_neword <- colMeans(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_neword <- colMedians(as.matrix(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_neword <- colSds(as.matrix(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)]),na.rm = TRUE)
neworders_mmv1 <- neworders_dataframe_time %>% rbind(neworders_dataframe_time, mean_row_neword)
neworders_mmv2 <- neworders_mmv1 %>% rbind(neworders_mmv1, median_row_neword)
neworders_mmv <- neworders_mmv2 %>% rbind(neworders_mmv2, sd_row_neword)
neworders_mmv[nrow(neworders_mmv)-2,ncol(neworders_mmv)] <- "Mean"
neworders_mmv[nrow(neworders_mmv)-1,ncol(neworders_mmv)] <- "Median"
neworders_mmv[nrow(neworders_mmv),ncol(neworders_mmv)] <- "Standard Deviation"
tail(neworders_mmv,10)
mean_row_unfillord <- colMeans(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_unfillord <- colMedians(as.matrix(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_unfillord <- colSds(as.matrix(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)]),na.rm = TRUE)
unfillord_mmv1 <- unfilledorders_dataframe_time %>% rbind(unfilledorders_dataframe_time, mean_row_unfillord)
unfillord_mmv2 <- unfillord_mmv1 %>% rbind(unfillord_mmv1, median_row_unfillord)
unfillord_mmv <- unfillord_mmv2 %>% rbind(unfillord_mmv2, sd_row_unfillord)
unfillord_mmv[nrow(unfillord_mmv)-2,ncol(unfillord_mmv)] <- "Mean"
unfillord_mmv[nrow(unfillord_mmv)-1,ncol(unfillord_mmv)] <- "Median"
unfillord_mmv[nrow(unfillord_mmv),ncol(unfillord_mmv)] <- "Standard Deviation"
tail(unfillord_mmv,10)
mean_row_totalinv <- colMeans(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_totalinv <- colMedians(as.matrix(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_totalinv <- colSds(as.matrix(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)]),na.rm = TRUE)
totalinv_mmv1 <- totalinventories_dataframe_time %>% rbind(totalinventories_dataframe_time, mean_row_totalinv)
totalinv_mmv2 <- totalinv_mmv1 %>% rbind(totalinv_mmv1, median_row_totalinv)
totalinv_mmv <- totalinv_mmv2 %>% rbind(totalinv_mmv2, sd_row_totalinv)
totalinv_mmv[nrow(totalinv_mmv)-2,ncol(totalinv_mmv)] <- "Mean"
totalinv_mmv[nrow(totalinv_mmv)-1,ncol(totalinv_mmv)] <- "Median"
totalinv_mmv[nrow(totalinv_mmv),ncol(totalinv_mmv)] <- "Standard Deviation"
tail(totalinv_mmv,10)
mean_row_invtoship <- colMeans(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_invtoship <- colMedians(as.matrix(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_invtoship <- colSds(as.matrix(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)]),na.rm = TRUE)
invtoship_mmv1 <- inventoriestoshipments_dataframe_time %>% rbind(inventoriestoshipments_dataframe_time, mean_row_invtoship)
invtoship_mmv2 <- invtoship_mmv1 %>% rbind(invtoship_mmv1, median_row_invtoship)
invtoship_mmv <- invtoship_mmv2 %>% rbind(invtoship_mmv2, sd_row_invtoship)
invtoship_mmv[nrow(invtoship_mmv)-2,ncol(invtoship_mmv)] <- "Mean"
invtoship_mmv[nrow(invtoship_mmv)-1,ncol(invtoship_mmv)] <- "Median"
invtoship_mmv[nrow(invtoship_mmv),ncol(invtoship_mmv)] <- "Standard Deviation"
tail(invtoship_mmv,10)
mean_row_unfilltoship <- colMeans(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)],na.rm = TRUE)
median_row_unfilltoship <- colMedians(as.matrix(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)]),na.rm = TRUE)
sd_row_unfilltoship <- colSds(as.matrix(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)]),na.rm = TRUE)
unfilltoship_mmv1 <- unfilledorderstoshipments_dataframe_time %>% rbind(unfilledorderstoshipments_dataframe_time, mean_row_unfilltoship)
unfilltoship_mmv2 <- unfilltoship_mmv1 %>% rbind(unfilltoship_mmv1, median_row_unfilltoship)
unfilltoship_mmv <- unfilltoship_mmv2 %>% rbind(unfilltoship_mmv2, sd_row_unfilltoship)
unfilltoship_mmv[nrow(unfilltoship_mmv)-2,ncol(unfilltoship_mmv)] <- "Mean"
unfilltoship_mmv[nrow(unfilltoship_mmv)-1,ncol(unfilltoship_mmv)] <- "Median"
unfilltoship_mmv[nrow(unfilltoship_mmv),ncol(unfilltoship_mmv)] <- "Standard Deviation"
tail(unfilltoship_mmv,10)
shipment_means <- shipments_mmv %>% filter(shipments_mmv$Date == "Mean") %>% select_if(. >= 300000)
shipment_means
AMTMVS <- ts(data = shipments_mmv$AMTMVS, start=c(1992), end=c(2021), frequency = 12)
AMXTVS <- ts(data = shipments_mmv$AMXTVS, start=c(1992), end=c(2021), frequency = 12)
AMXDVS <- ts(data = shipments_mmv$AMXDVS, start=c(1992), end=c(2021), frequency = 12)
ts.plot(AMTMVS, AMXTVS, AMXDVS, gpars=list(xlab="Year", ylab="Value",lty=c(1:3)), col=rep(c("red","blue","green")))
legend("topleft", legend = c("AMTMVS","AMXTVS","AMXDVS"), col = c("red","blue","green"), lty=c(1:3))

shipments_order <- order(colMeans(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)],na.rm = TRUE))
shipments_mmv_ordered_mean <- shipments_mmv %>% select(all_of(shipments_order), ncol(shipments_mmv))
shipments_mmv_ordered_mean_adj <- shipments_mmv_ordered_mean %>% select(starts_with('A')) #87 Columns
shipments_mmv_ordered_mean_unadj <- shipments_mmv_ordered_mean %>% select(starts_with('U')) #87 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_mean_adj)[i],colnames(shipments_mmv_ordered_mean_adj)[i+1],colnames(shipments_mmv_ordered_mean_adj)[i+2],colnames(shipments_mmv_ordered_mean_adj)[i+3],colnames(shipments_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_mean_unadj)[i],colnames(shipments_mmv_ordered_mean_unadj)[i+1],colnames(shipments_mmv_ordered_mean_unadj)[i+2],colnames(shipments_mmv_ordered_mean_unadj)[i+3],colnames(shipments_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

neworders_order <- order(colMeans(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)],na.rm = TRUE))
neworders_mmv_ordered_mean <- neworders_mmv %>% select(all_of(neworders_order), ncol(neworders_mmv))
neworders_mmv_ordered_mean_adj <- neworders_mmv_ordered_mean %>% select(starts_with('A')) #52 Columns
neworders_mmv_ordered_mean_unadj <- neworders_mmv_ordered_mean %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_mean_adj)[i],colnames(neworders_mmv_ordered_mean_adj)[i+1],colnames(neworders_mmv_ordered_mean_adj)[i+2],colnames(neworders_mmv_ordered_mean_adj)[i+3],colnames(neworders_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_mean_unadj)[i],colnames(neworders_mmv_ordered_mean_unadj)[i+1],colnames(neworders_mmv_ordered_mean_unadj)[i+2],colnames(neworders_mmv_ordered_mean_unadj)[i+3],colnames(neworders_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilledorders_order <- order(colMeans(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)],na.rm = TRUE))
unfilledorders_mmv_ordered_mean <- unfillord_mmv %>% select(all_of(unfilledorders_order), ncol(unfillord_mmv))
unfilledorders_mmv_ordered_mean_adj <- unfilledorders_mmv_ordered_mean %>% select(starts_with('A')) #50 Columns
unfilledorders_mmv_ordered_mean_unadj <- unfilledorders_mmv_ordered_mean %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_mean_adj)[i],colnames(unfilledorders_mmv_ordered_mean_adj)[i+1],colnames(unfilledorders_mmv_ordered_mean_adj)[i+2],colnames(unfilledorders_mmv_ordered_mean_adj)[i+3],colnames(unfilledorders_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_mean_unadj)[i],colnames(unfilledorders_mmv_ordered_mean_unadj)[i+1],colnames(unfilledorders_mmv_ordered_mean_unadj)[i+2],colnames(unfilledorders_mmv_ordered_mean_unadj)[i+3],colnames(unfilledorders_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

totalinv_order <- order(colMeans(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)],na.rm = TRUE))
totalinv_mmv_ordered_mean <- totalinv_mmv %>% select(all_of(totalinv_order), ncol(totalinv_mmv))
totalinv_mmv_ordered_mean_adj <- totalinv_mmv_ordered_mean %>% select(starts_with('A')) #158 Columns
totalinv_mmv_ordered_mean_unadj <- totalinv_mmv_ordered_mean %>% select(starts_with('U')) #158 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_mean_adj)[i],colnames(totalinv_mmv_ordered_mean_adj)[i+1],colnames(totalinv_mmv_ordered_mean_adj)[i+2],colnames(totalinv_mmv_ordered_mean_adj)[i+3],colnames(totalinv_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_mean_unadj)[i],colnames(totalinv_mmv_ordered_mean_unadj)[i+1],colnames(totalinv_mmv_ordered_mean_unadj)[i+2],colnames(totalinv_mmv_ordered_mean_unadj)[i+3],colnames(totalinv_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

invtoship_order <- order(colMeans(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)],na.rm = TRUE))
invtoship_mmv_ordered_mean <- invtoship_mmv %>% select(all_of(invtoship_order), ncol(invtoship_mmv))
invtoship_mmv_ordered_mean_adj <- invtoship_mmv_ordered_mean %>% select(starts_with('A')) #24 Columns
invtoship_mmv_ordered_mean_unadj <- invtoship_mmv_ordered_mean %>% select(starts_with('U')) #24 Columns
for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_mean_adj)[i],colnames(invtoship_mmv_ordered_mean_adj)[i+1],colnames(invtoship_mmv_ordered_mean_adj)[i+2],colnames(invtoship_mmv_ordered_mean_adj)[i+3],colnames(invtoship_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_mean_unadj)[i],colnames(invtoship_mmv_ordered_mean_unadj)[i+1],colnames(invtoship_mmv_ordered_mean_unadj)[i+2],colnames(invtoship_mmv_ordered_mean_unadj)[i+3],colnames(invtoship_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilltoship_order <- order(colMeans(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)],na.rm = TRUE))
unfilltoship_mmv_ordered_mean <- unfilltoship_mmv %>% select(all_of(unfilltoship_order), ncol(unfilltoship_mmv))
unfilltoship_mmv_ordered_mean_adj <- unfilltoship_mmv_ordered_mean %>% select(starts_with('A')) #9 Columns
unfilltoship_mmv_ordered_mean_unadj <- unfilltoship_mmv_ordered_mean %>% select(starts_with('U')) #9 Columns
for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_mean_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_mean_adj)[i],colnames(unfilltoship_mmv_ordered_mean_adj)[i+1],colnames(unfilltoship_mmv_ordered_mean_adj)[i+2],colnames(unfilltoship_mmv_ordered_mean_adj)[i+3],colnames(unfilltoship_mmv_ordered_mean_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_mean_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_mean_unadj)[i],colnames(unfilltoship_mmv_ordered_mean_unadj)[i+1],colnames(unfilltoship_mmv_ordered_mean_unadj)[i+2],colnames(unfilltoship_mmv_ordered_mean_unadj)[i+3],colnames(unfilltoship_mmv_ordered_mean_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

shipments_order_med <- order(colMedians(as.matrix(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)]),na.rm = TRUE))
shipments_mmv_ordered_median <- shipments_mmv %>% select(all_of(shipments_order_med), ncol(shipments_mmv))
shipments_mmv_ordered_median_adj <- shipments_mmv_ordered_median %>% select(starts_with('A')) #87 Columns
shipments_mmv_ordered_median_unadj <- shipments_mmv_ordered_median %>% select(starts_with('U')) #87 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_median_adj)[i],colnames(shipments_mmv_ordered_median_adj)[i+1],colnames(shipments_mmv_ordered_median_adj)[i+2],colnames(shipments_mmv_ordered_median_adj)[i+3],colnames(shipments_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_median_unadj)[i],colnames(shipments_mmv_ordered_median_unadj)[i+1],colnames(shipments_mmv_ordered_median_unadj)[i+2],colnames(shipments_mmv_ordered_median_unadj)[i+3],colnames(shipments_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

neworders_order_med <- order(colMeans(as.matrix(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)]),na.rm = TRUE))
neworders_mmv_ordered_median <- neworders_mmv %>% select(all_of(neworders_order_med), ncol(neworders_mmv))
neworders_mmv_ordered_median_adj <- neworders_mmv_ordered_median %>% select(starts_with('A')) #52 Columns
neworders_mmv_ordered_median_unadj <- neworders_mmv_ordered_median %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_median_adj)[i],colnames(neworders_mmv_ordered_median_adj)[i+1],colnames(neworders_mmv_ordered_median_adj)[i+2],colnames(neworders_mmv_ordered_median_adj)[i+3],colnames(neworders_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_median_unadj)[i],colnames(neworders_mmv_ordered_median_unadj)[i+1],colnames(neworders_mmv_ordered_median_unadj)[i+2],colnames(neworders_mmv_ordered_median_unadj)[i+3],colnames(neworders_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilledorders_order_med <- order(colMedians(as.matrix(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)]),na.rm = TRUE))
unfilledorders_mmv_ordered_median <- unfillord_mmv %>% select(all_of(unfilledorders_order_med), ncol(unfillord_mmv))
unfilledorders_mmv_ordered_median_adj <- unfilledorders_mmv_ordered_median %>% select(starts_with('A')) #50 Columns
unfilledorders_mmv_ordered_median_unadj <- unfilledorders_mmv_ordered_median %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_median_adj)[i],colnames(unfilledorders_mmv_ordered_median_adj)[i+1],colnames(unfilledorders_mmv_ordered_median_adj)[i+2],colnames(unfilledorders_mmv_ordered_median_adj)[i+3],colnames(unfilledorders_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_median_unadj)[i],colnames(unfilledorders_mmv_ordered_median_unadj)[i+1],colnames(unfilledorders_mmv_ordered_median_unadj)[i+2],colnames(unfilledorders_mmv_ordered_median_unadj)[i+3],colnames(unfilledorders_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

totalinv_order_med <- order(colMedians(as.matrix(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)]),na.rm = TRUE))
totalinv_mmv_ordered_median <- totalinv_mmv %>% select(all_of(totalinv_order_med), ncol(totalinv_mmv))
totalinv_mmv_ordered_median_adj <- totalinv_mmv_ordered_median %>% select(starts_with('A')) #158 Columns
totalinv_mmv_ordered_median_unadj <- totalinv_mmv_ordered_median %>% select(starts_with('U')) #158 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_median_adj)[i],colnames(totalinv_mmv_ordered_median_adj)[i+1],colnames(totalinv_mmv_ordered_median_adj)[i+2],colnames(totalinv_mmv_ordered_median_adj)[i+3],colnames(totalinv_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_median_unadj)[i],colnames(totalinv_mmv_ordered_median_unadj)[i+1],colnames(totalinv_mmv_ordered_median_unadj)[i+2],colnames(totalinv_mmv_ordered_median_unadj)[i+3],colnames(totalinv_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

invtoship_order_med <- order(colMedians(as.matrix(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)]),na.rm = TRUE))
invtoship_mmv_ordered_median <- invtoship_mmv %>% select(all_of(invtoship_order_med), ncol(invtoship_mmv))
invtoship_mmv_ordered_median_adj <- invtoship_mmv_ordered_median %>% select(starts_with('A')) #24 Columns
invtoship_mmv_ordered_median_unadj <- invtoship_mmv_ordered_median %>% select(starts_with('U')) #24 Columns
for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_median_adj)[i],colnames(invtoship_mmv_ordered_median_adj)[i+1],colnames(invtoship_mmv_ordered_median_adj)[i+2],colnames(invtoship_mmv_ordered_median_adj)[i+3],colnames(invtoship_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_median_unadj)[i],colnames(invtoship_mmv_ordered_median_unadj)[i+1],colnames(invtoship_mmv_ordered_median_unadj)[i+2],colnames(invtoship_mmv_ordered_median_unadj)[i+3],colnames(invtoship_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilltoship_order_med <- order(colMedians(as.matrix(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)]),na.rm = TRUE))
unfilltoship_mmv_ordered_median <- unfilltoship_mmv %>% select(all_of(unfilltoship_order_med), ncol(unfilltoship_mmv))
unfilltoship_mmv_ordered_median_adj <- unfilltoship_mmv_ordered_median %>% select(starts_with('A')) #9 Columns
unfilltoship_mmv_ordered_median_unadj <- unfilltoship_mmv_ordered_median %>% select(starts_with('U')) #9 Columns
for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_median_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_median_adj)[i],colnames(unfilltoship_mmv_ordered_median_adj)[i+1],colnames(unfilltoship_mmv_ordered_median_adj)[i+2],colnames(unfilltoship_mmv_ordered_median_adj)[i+3],colnames(unfilltoship_mmv_ordered_median_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_median_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_median_unadj)[i],colnames(unfilltoship_mmv_ordered_median_unadj)[i+1],colnames(unfilltoship_mmv_ordered_median_unadj)[i+2],colnames(unfilltoship_mmv_ordered_median_unadj)[i+3],colnames(unfilltoship_mmv_ordered_median_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

shipments_order_sd <- order(colSds(as.matrix(shipments_dataframe_time[sapply(shipments_dataframe_time, is.numeric)]),na.rm = TRUE))
shipments_mmv_ordered_standev <- shipments_mmv %>% select(all_of(shipments_order_sd), ncol(shipments_mmv))
shipments_mmv_ordered_standev_adj <- shipments_mmv_ordered_standev %>% select(starts_with('A')) #9 Columns
shipments_mmv_ordered_standev_unadj <- shipments_mmv_ordered_standev %>% select(starts_with('U')) #9 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_standev_adj)[i],colnames(shipments_mmv_ordered_standev_adj)[i+1],colnames(shipments_mmv_ordered_standev_adj)[i+2],colnames(shipments_mmv_ordered_standev_adj)[i+3],colnames(shipments_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81))
{
  Series1 <- ts(data = shipments_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = shipments_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = shipments_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = shipments_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = shipments_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(shipments_mmv_ordered_standev_unadj)[i],colnames(shipments_mmv_ordered_standev_unadj)[i+1],colnames(shipments_mmv_ordered_standev_unadj)[i+2],colnames(shipments_mmv_ordered_standev_unadj)[i+3],colnames(shipments_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

neworders_order_sd <- order(colSds(as.matrix(neworders_dataframe_time[sapply(neworders_dataframe_time, is.numeric)]),na.rm = TRUE))
neworders_mmv_ordered_standev <- neworders_mmv %>% select(all_of(neworders_order_sd), ncol(neworders_mmv))
neworders_mmv_ordered_standev_adj <- neworders_mmv_ordered_standev %>% select(starts_with('A')) #52 Columns
neworders_mmv_ordered_standev_unadj <- neworders_mmv_ordered_standev %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_standev_adj)[i],colnames(neworders_mmv_ordered_standev_adj)[i+1],colnames(neworders_mmv_ordered_standev_adj)[i+2],colnames(neworders_mmv_ordered_standev_adj)[i+3],colnames(neworders_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = neworders_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = neworders_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = neworders_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = neworders_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = neworders_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(neworders_mmv_ordered_standev_unadj)[i],colnames(neworders_mmv_ordered_standev_unadj)[i+1],colnames(neworders_mmv_ordered_standev_unadj)[i+2],colnames(neworders_mmv_ordered_standev_unadj)[i+3],colnames(neworders_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilledorders_order_sd <- order(colSds(as.matrix(unfilledorders_dataframe_time[sapply(unfilledorders_dataframe_time, is.numeric)]),na.rm = TRUE))
unfilledorders_mmv_ordered_standev <- unfillord_mmv %>% select(all_of(unfilledorders_order_sd), ncol(unfillord_mmv))
unfilledorders_mmv_ordered_standev_adj <- unfilledorders_mmv_ordered_standev %>% select(starts_with('A')) #50 Columns
unfilledorders_mmv_ordered_standev_unadj <- unfilledorders_mmv_ordered_standev %>% select(starts_with('U')) #52 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_standev_adj)[i],colnames(unfilledorders_mmv_ordered_standev_adj)[i+1],colnames(unfilledorders_mmv_ordered_standev_adj)[i+2],colnames(unfilledorders_mmv_ordered_standev_adj)[i+3],colnames(unfilledorders_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46))
{
  Series1 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilledorders_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilledorders_mmv_ordered_standev_unadj)[i],colnames(unfilledorders_mmv_ordered_standev_unadj)[i+1],colnames(unfilledorders_mmv_ordered_standev_unadj)[i+2],colnames(unfilledorders_mmv_ordered_standev_unadj)[i+3],colnames(unfilledorders_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

totalinv_order_sd <- order(colSds(as.matrix(totalinventories_dataframe_time[sapply(totalinventories_dataframe_time, is.numeric)]),na.rm = TRUE))
totalinv_mmv_ordered_standev <- totalinv_mmv %>% select(all_of(totalinv_order_sd), ncol(totalinv_mmv))
totalinv_mmv_ordered_standev_adj <- totalinv_mmv_ordered_standev %>% select(starts_with('A')) #158 Columns
totalinv_mmv_ordered_standev_unadj <- totalinv_mmv_ordered_standev %>% select(starts_with('U')) #158 Columns
for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_standev_adj)[i],colnames(totalinv_mmv_ordered_standev_adj)[i+1],colnames(totalinv_mmv_ordered_standev_adj)[i+2],colnames(totalinv_mmv_ordered_standev_adj)[i+3],colnames(totalinv_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141,146,151))
{
  Series1 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = totalinv_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(totalinv_mmv_ordered_standev_unadj)[i],colnames(totalinv_mmv_ordered_standev_unadj)[i+1],colnames(totalinv_mmv_ordered_standev_unadj)[i+2],colnames(totalinv_mmv_ordered_standev_unadj)[i+3],colnames(totalinv_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

invtoship_order_sd <- order(colSds(as.matrix(inventoriestoshipments_dataframe_time[sapply(inventoriestoshipments_dataframe_time, is.numeric)]),na.rm = TRUE))
invtoship_mmv_ordered_standev <- invtoship_mmv %>% select(all_of(invtoship_order_sd), ncol(invtoship_mmv))
invtoship_mmv_ordered_standev_adj <- invtoship_mmv_ordered_standev %>% select(starts_with('A')) #24 Columns
invtoship_mmv_ordered_standev_unadj <- invtoship_mmv_ordered_standev %>% select(starts_with('U')) #24 Columns
for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_standev_adj)[i],colnames(invtoship_mmv_ordered_standev_adj)[i+1],colnames(invtoship_mmv_ordered_standev_adj)[i+2],colnames(invtoship_mmv_ordered_standev_adj)[i+3],colnames(invtoship_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1,6,11,16))
{
  Series1 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = invtoship_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(invtoship_mmv_ordered_standev_unadj)[i],colnames(invtoship_mmv_ordered_standev_unadj)[i+1],colnames(invtoship_mmv_ordered_standev_unadj)[i+2],colnames(invtoship_mmv_ordered_standev_unadj)[i+3],colnames(invtoship_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

unfilltoship_order_sd <- order(colSds(as.matrix(unfilledorderstoshipments_dataframe_time[sapply(unfilledorderstoshipments_dataframe_time, is.numeric)]),na.rm = TRUE))
unfilltoship_mmv_ordered_standev <- unfilltoship_mmv %>% select(all_of(unfilltoship_order_sd), ncol(unfilltoship_mmv))
unfilltoship_mmv_ordered_standev_adj <- unfilltoship_mmv_ordered_standev %>% select(starts_with('A')) #9 Columns
unfilltoship_mmv_ordered_standev_unadj <- unfilltoship_mmv_ordered_standev %>% select(starts_with('U')) #9 Columns
for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_standev_adj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_standev_adj)[i],colnames(unfilltoship_mmv_ordered_standev_adj)[i+1],colnames(unfilltoship_mmv_ordered_standev_adj)[i+2],colnames(unfilltoship_mmv_ordered_standev_adj)[i+3],colnames(unfilltoship_mmv_ordered_standev_adj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

for (i in c(1))
{
  Series1 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i], start=c(1992), end=c(2021), frequency = 12)
  Series2 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i+1], start=c(1992), end=c(2021), frequency = 12)
  Series3 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i+2], start=c(1992), end=c(2021), frequency = 12)
  Series4 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i+3], start=c(1992), end=c(2021), frequency = 12)
  Series5 <- ts(data = unfilltoship_mmv_ordered_standev_unadj[,i+4], start=c(1992), end=c(2021), frequency = 12)
  ts.plot(Series1, Series2, Series3, Series4, Series5, gpars=list(xlab="Year", ylab="Value",lty=c(1:5)), col=rep(c("red","purple","black","green","blue")))
  legend("topleft", legend = c(colnames(unfilltoship_mmv_ordered_standev_unadj)[i],colnames(unfilltoship_mmv_ordered_standev_unadj)[i+1],colnames(unfilltoship_mmv_ordered_standev_unadj)[i+2],colnames(unfilltoship_mmv_ordered_standev_unadj)[i+3],colnames(unfilltoship_mmv_ordered_standev_unadj)[i+4]), col = c("red","purple","black","green","blue"), lty=c(1:4))
}

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShtb3NhaWMpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkodGliYmxlKQ0KbGlicmFyeShtYXRyaXhTdGF0cykNClNoaXBtZW50cyA8LSByZWFkX2V4Y2VsKCJTaGlwbWVudHMueGxzIiwgY29sX25hbWVzID0gRkFMU0UpDQpOZXdPcmRlcnMgPC0gcmVhZF9leGNlbCgiTmV3T3JkZXJzLnhscyIsIGNvbF9uYW1lcyA9IEZBTFNFKQ0KVW5maWxsZWRPcmRlcnMgPC0gcmVhZF9leGNlbCgiVW5maWxsZWRPcmRlcnMueGxzIiwgY29sX25hbWVzID0gRkFMU0UpDQpUb3RhbEludmVudG9yaWVzIDwtIHJlYWRfZXhjZWwoIlRvdGFsSW52ZW50b3JpZXMueGxzIiwgY29sX25hbWVzID0gRkFMU0UpDQpJbnZlbnRvcmllc1RvU2hpcG1lbnRzIDwtIHJlYWRfZXhjZWwoIkludmVudG9yaWVzVG9TaGlwbWVudHMueGxzIiwgY29sX25hbWVzID0gRkFMU0UpDQpVbmZpbGxlZE9yZGVyc1RvU2hpcG1lbnRzIDwtIHJlYWRfZXhjZWwoIlVuZmlsbGVkT3JkZXJzVG9TaGlwbWVudHMueGxzIiwgY29sX25hbWVzID0gRkFMU0UpDQpgYGANCmBgYHtyfQ0Kc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdCA8LSBhcy5hcnJheSh1bmlxdWUoU2hpcG1lbnRzJC4uLjEpKQ0Kc2hpcG1lbnRzX2RhdGFmcmFtZSA8LSB0aWJibGUoLnJvd3MgPSAzNjApDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmZvciAoaSBpbiAxOmxlbmd0aChzaGlwbWVudHNfaW5kdXN0cnlfY29kZV9saXN0KSkNCnsNCiAgY3VycmVudF9jb2RlIDwtIHNoaXBtZW50c19pbmR1c3RyeV9jb2RlX2xpc3RbaV0NCiAgY3VycmVudF9pbmR1c3RyeSA8LSBTaGlwbWVudHMgJT4lIGZpbHRlcihTaGlwbWVudHMkLi4uMSA9PSBjdXJyZW50X2NvZGUsIFNoaXBtZW50cyQuLi4yICE9ICIyMDIyIikgJT4lIHNlbGVjdCgzOjE0KQ0KICBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSA8LSBhcy5saXN0KHQoY3VycmVudF9pbmR1c3RyeSkpDQogIGZvciAoaiBpbiAxOmxlbmd0aChjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSkpDQogIHsNCiAgICBzaGlwbWVudHNfZGF0YWZyYW1lW2osaV0gPSBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZVtqXQ0KICB9DQogIHNoaXBtZW50c19kYXRhZnJhbWVbaV0gPC0gc2FwcGx5KHNoaXBtZW50c19kYXRhZnJhbWVbaV0sYXMubnVtZXJpYykNCn0NCmNvbG5hbWVzKHNoaXBtZW50c19kYXRhZnJhbWUpID0gc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdA0KZGF0ZXMgPC0gc2VxKGZyb20gPSBhcy5EYXRlKCIxOTkyLzAxLzAxIiksIHRvID0gYXMuRGF0ZSgiMjAyMS8xMi8wMSIpLCBieSA9ICJtb250aHMiKQ0KZGF0ZXMyIDwtIGZvcm1hdChkYXRlcywgIiVtLyV5IikNCnNoaXBtZW50c19kYXRhZnJhbWVfdGltZSA8LSBzaGlwbWVudHNfZGF0YWZyYW1lICU+JSBhZGRfY29sdW1uKERhdGUgPSBkYXRlczIpDQpoZWFkKHNoaXBtZW50c19kYXRhZnJhbWVfdGltZSwxMikNCmBgYA0KYGBge3J9DQpuZXdvcmRlcnNfaW5kdXN0cnlfY29kZV9saXN0IDwtIGFzLmFycmF5KHVuaXF1ZShOZXdPcmRlcnMkLi4uMSkpDQpuZXdvcmRlcnNfZGF0YWZyYW1lIDwtIHRpYmJsZSgucm93cyA9IDM2MCkNCmBgYA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmZvciAoaSBpbiAxOmxlbmd0aChuZXdvcmRlcnNfaW5kdXN0cnlfY29kZV9saXN0KSkNCnsNCiAgY3VycmVudF9jb2RlIDwtIG5ld29yZGVyc19pbmR1c3RyeV9jb2RlX2xpc3RbaV0NCiAgY3VycmVudF9pbmR1c3RyeSA8LSBOZXdPcmRlcnMgJT4lIGZpbHRlcihOZXdPcmRlcnMkLi4uMSA9PSBjdXJyZW50X2NvZGUsIE5ld09yZGVycyQuLi4yICE9ICIyMDIyIikgJT4lIHNlbGVjdCgzOjE0KQ0KICBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSA8LSBhcy5saXN0KHQoY3VycmVudF9pbmR1c3RyeSkpDQogIGZvciAoaiBpbiAxOmxlbmd0aChjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSkpDQogIHsNCiAgICBuZXdvcmRlcnNfZGF0YWZyYW1lW2osaV0gPSBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZVtqXQ0KICB9DQogIG5ld29yZGVyc19kYXRhZnJhbWVbaV0gPC0gc2FwcGx5KG5ld29yZGVyc19kYXRhZnJhbWVbaV0sYXMubnVtZXJpYykNCn0NCmNvbG5hbWVzKG5ld29yZGVyc19kYXRhZnJhbWUpID0gbmV3b3JkZXJzX2luZHVzdHJ5X2NvZGVfbGlzdA0KZGF0ZXMgPC0gc2VxKGZyb20gPSBhcy5EYXRlKCIxOTkyLzAxLzAxIiksIHRvID0gYXMuRGF0ZSgiMjAyMS8xMi8wMSIpLCBieSA9ICJtb250aHMiKQ0KZGF0ZXMyIDwtIGZvcm1hdChkYXRlcywgIiVtLyV5IikNCm5ld29yZGVyc19kYXRhZnJhbWVfdGltZSA8LSBuZXdvcmRlcnNfZGF0YWZyYW1lICU+JSBhZGRfY29sdW1uKERhdGUgPSBkYXRlczIpDQpoZWFkKG5ld29yZGVyc19kYXRhZnJhbWVfdGltZSwxMikNCmBgYA0KYGBge3J9DQp1bmZpbGxlZG9yZGVyc19pbmR1c3RyeV9jb2RlX2xpc3QgPC0gYXMuYXJyYXkodW5pcXVlKFVuZmlsbGVkT3JkZXJzJC4uLjEpKQ0KdW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lIDwtIHRpYmJsZSgucm93cyA9IDM2MCkNCmBgYA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmZvciAoaSBpbiAxOmxlbmd0aCh1bmZpbGxlZG9yZGVyc19pbmR1c3RyeV9jb2RlX2xpc3QpKQ0Kew0KICBjdXJyZW50X2NvZGUgPC0gdW5maWxsZWRvcmRlcnNfaW5kdXN0cnlfY29kZV9saXN0W2ldDQogIGN1cnJlbnRfaW5kdXN0cnkgPC0gVW5maWxsZWRPcmRlcnMgJT4lIGZpbHRlcihVbmZpbGxlZE9yZGVycyQuLi4xID09IGN1cnJlbnRfY29kZSwgVW5maWxsZWRPcmRlcnMkLi4uMiAhPSAiMjAyMiIpICU+JSBzZWxlY3QoMzoxNCkNCiAgY3VycmVudF9pbmR1c3RyeV90cmFuc3Bvc2UgPC0gYXMubGlzdCh0KGN1cnJlbnRfaW5kdXN0cnkpKQ0KICBmb3IgKGogaW4gMTpsZW5ndGgoY3VycmVudF9pbmR1c3RyeV90cmFuc3Bvc2UpKQ0KICB7DQogICAgdW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lW2osaV0gPSBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZVtqXQ0KICB9DQogIHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZVtpXSA8LSBzYXBwbHkodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lW2ldLGFzLm51bWVyaWMpDQp9DQpjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWUpID0gdW5maWxsZWRvcmRlcnNfaW5kdXN0cnlfY29kZV9saXN0DQpkYXRlcyA8LSBzZXEoZnJvbSA9IGFzLkRhdGUoIjE5OTIvMDEvMDEiKSwgdG8gPSBhcy5EYXRlKCIyMDIxLzEyLzAxIiksIGJ5ID0gIm1vbnRocyIpDQpkYXRlczIgPC0gZm9ybWF0KGRhdGVzLCAiJW0vJXkiKQ0KdW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUgPC0gdW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lICU+JSBhZGRfY29sdW1uKERhdGUgPSBkYXRlczIpDQpoZWFkKHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZV90aW1lLDEyKQ0KYGBgDQpgYGB7cn0NCnRvdGFsaW52ZW50b3JpZXNfaW5kdXN0cnlfY29kZV9saXN0IDwtIGFzLmFycmF5KHVuaXF1ZShUb3RhbEludmVudG9yaWVzJC4uLjEpKQ0KdG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWUgPC0gdGliYmxlKC5yb3dzID0gMzYwKQ0KYGBgDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZm9yIChpIGluIDE6bGVuZ3RoKHRvdGFsaW52ZW50b3JpZXNfaW5kdXN0cnlfY29kZV9saXN0KSkNCnsNCiAgY3VycmVudF9jb2RlIDwtIHRvdGFsaW52ZW50b3JpZXNfaW5kdXN0cnlfY29kZV9saXN0W2ldDQogIGN1cnJlbnRfaW5kdXN0cnkgPC0gVG90YWxJbnZlbnRvcmllcyAlPiUgZmlsdGVyKFRvdGFsSW52ZW50b3JpZXMkLi4uMSA9PSBjdXJyZW50X2NvZGUsIFRvdGFsSW52ZW50b3JpZXMkLi4uMiAhPSAiMjAyMiIpICU+JSBzZWxlY3QoMzoxNCkNCiAgY3VycmVudF9pbmR1c3RyeV90cmFuc3Bvc2UgPC0gYXMubGlzdCh0KGN1cnJlbnRfaW5kdXN0cnkpKQ0KICBmb3IgKGogaW4gMTpsZW5ndGgoY3VycmVudF9pbmR1c3RyeV90cmFuc3Bvc2UpKQ0KICB7DQogICAgdG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVbaixpXSA9IGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlW2pdDQogIH0NCiAgdG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVbaV0gPC0gc2FwcGx5KHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lW2ldLGFzLm51bWVyaWMpDQp9DQpjb2xuYW1lcyh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZSkgPSB0b3RhbGludmVudG9yaWVzX2luZHVzdHJ5X2NvZGVfbGlzdA0KZGF0ZXMgPC0gc2VxKGZyb20gPSBhcy5EYXRlKCIxOTkyLzAxLzAxIiksIHRvID0gYXMuRGF0ZSgiMjAyMS8xMi8wMSIpLCBieSA9ICJtb250aHMiKQ0KZGF0ZXMyIDwtIGZvcm1hdChkYXRlcywgIiVtLyV5IikNCnRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWUgPC0gdG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWUgJT4lIGFkZF9jb2x1bW4oRGF0ZSA9IGRhdGVzMikNCmhlYWQodG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVfdGltZSwxMikNCmBgYA0KYGBge3J9DQppbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdCA8LSBhcy5hcnJheSh1bmlxdWUoSW52ZW50b3JpZXNUb1NoaXBtZW50cyQuLi4xKSkNCmludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lIDwtIHRpYmJsZSgucm93cyA9IDM2MCkNCmBgYA0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmZvciAoaSBpbiAxOmxlbmd0aChpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdCkpDQp7DQogIGN1cnJlbnRfY29kZSA8LSBpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2luZHVzdHJ5X2NvZGVfbGlzdFtpXQ0KICBjdXJyZW50X2luZHVzdHJ5IDwtIEludmVudG9yaWVzVG9TaGlwbWVudHMgJT4lIGZpbHRlcihJbnZlbnRvcmllc1RvU2hpcG1lbnRzJC4uLjEgPT0gY3VycmVudF9jb2RlLCBJbnZlbnRvcmllc1RvU2hpcG1lbnRzJC4uLjIgIT0gIjIwMjIiKSAlPiUgc2VsZWN0KDM6MTQpDQogIGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlIDwtIGFzLmxpc3QodChjdXJyZW50X2luZHVzdHJ5KSkNCiAgZm9yIChqIGluIDE6bGVuZ3RoKGN1cnJlbnRfaW5kdXN0cnlfdHJhbnNwb3NlKSkNCiAgew0KICAgIGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lW2osaV0gPSBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZVtqXQ0KICB9DQogIGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lW2ldIDwtIHNhcHBseShpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZVtpXSxhcy5udW1lcmljKQ0KfQ0KY29sbmFtZXMoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWUpID0gaW52ZW50b3JpZXN0b3NoaXBtZW50c19pbmR1c3RyeV9jb2RlX2xpc3QNCmRhdGVzIDwtIHNlcShmcm9tID0gYXMuRGF0ZSgiMTk5Mi8wMS8wMSIpLCB0byA9IGFzLkRhdGUoIjIwMjEvMTIvMDEiKSwgYnkgPSAibW9udGhzIikNCmRhdGVzMiA8LSBmb3JtYXQoZGF0ZXMsICIlbS8leSIpDQppbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lIDwtIGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lICU+JSBhZGRfY29sdW1uKERhdGUgPSBkYXRlczIpDQpoZWFkKGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsMTIpDQpgYGANCmBgYHtyfQ0KdW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19pbmR1c3RyeV9jb2RlX2xpc3QgPC0gYXMuYXJyYXkodW5pcXVlKFVuZmlsbGVkT3JkZXJzVG9TaGlwbWVudHMkLi4uMSkpDQp1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZSA8LSB0aWJibGUoLnJvd3MgPSAzNjApDQpgYGANCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpmb3IgKGkgaW4gMTpsZW5ndGgodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19pbmR1c3RyeV9jb2RlX2xpc3QpKQ0Kew0KICBjdXJyZW50X2NvZGUgPC0gdW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19pbmR1c3RyeV9jb2RlX2xpc3RbaV0NCiAgY3VycmVudF9pbmR1c3RyeSA8LSBVbmZpbGxlZE9yZGVyc1RvU2hpcG1lbnRzICU+JSBmaWx0ZXIoVW5maWxsZWRPcmRlcnNUb1NoaXBtZW50cyQuLi4xID09IGN1cnJlbnRfY29kZSwgVW5maWxsZWRPcmRlcnNUb1NoaXBtZW50cyQuLi4yICE9ICIyMDIyIikgJT4lIHNlbGVjdCgzOjE0KQ0KICBjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSA8LSBhcy5saXN0KHQoY3VycmVudF9pbmR1c3RyeSkpDQogIGZvciAoaiBpbiAxOmxlbmd0aChjdXJyZW50X2luZHVzdHJ5X3RyYW5zcG9zZSkpDQogIHsNCiAgICB1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZVtqLGldID0gY3VycmVudF9pbmR1c3RyeV90cmFuc3Bvc2Vbal0NCiAgfQ0KICB1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZVtpXSA8LSBzYXBwbHkodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVbaV0sYXMubnVtZXJpYykNCn0NCmNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lKSA9IHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfaW5kdXN0cnlfY29kZV9saXN0DQpkYXRlcyA8LSBzZXEoZnJvbSA9IGFzLkRhdGUoIjE5OTIvMDEvMDEiKSwgdG8gPSBhcy5EYXRlKCIyMDIxLzEyLzAxIiksIGJ5ID0gIm1vbnRocyIpDQpkYXRlczIgPC0gZm9ybWF0KGRhdGVzLCAiJW0vJXkiKQ0KdW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSA8LSB1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZSAlPiUgYWRkX2NvbHVtbihEYXRlID0gZGF0ZXMyKQ0KaGVhZCh1bmZpbGxlZG9yZGVyc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLDEyKQ0KYGBgDQpgYGB7cn0NCm1lYW5fcm93X3NoaXAgPC0gY29sTWVhbnMoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSxuYS5ybSA9IFRSVUUpDQptZWRpYW5fcm93X3NoaXAgPC0gY29sTWVkaWFucyhhcy5tYXRyaXgoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0Kc2Rfcm93X3NoaXAgPC0gY29sU2RzKGFzLm1hdHJpeChzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHNoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQpzaGlwbWVudHNfbW12MSA8LSBzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUgJT4lIHJiaW5kKHNoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgbWVhbl9yb3dfc2hpcCkNCnNoaXBtZW50c19tbXYyIDwtIHNoaXBtZW50c19tbXYxICU+JSByYmluZChzaGlwbWVudHNfbW12MSwgbWVkaWFuX3Jvd19zaGlwKQ0Kc2hpcG1lbnRzX21tdiA8LSBzaGlwbWVudHNfbW12MiAlPiUgcmJpbmQoc2hpcG1lbnRzX21tdjIsIHNkX3Jvd19zaGlwKQ0Kc2hpcG1lbnRzX21tdltucm93KHNoaXBtZW50c19tbXYpLTIsbmNvbChzaGlwbWVudHNfbW12KV0gPC0gIk1lYW4iDQpzaGlwbWVudHNfbW12W25yb3coc2hpcG1lbnRzX21tdiktMSxuY29sKHNoaXBtZW50c19tbXYpXSA8LSAiTWVkaWFuIg0Kc2hpcG1lbnRzX21tdltucm93KHNoaXBtZW50c19tbXYpLG5jb2woc2hpcG1lbnRzX21tdildIDwtICJTdGFuZGFyZCBEZXZpYXRpb24iDQp0YWlsKHNoaXBtZW50c19tbXYsMTApDQpgYGANCmBgYHtyfQ0KbWVhbl9yb3dfbmV3b3JkIDwtIGNvbE1lYW5zKG5ld29yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKQ0KbWVkaWFuX3Jvd19uZXdvcmQgPC0gY29sTWVkaWFucyhhcy5tYXRyaXgobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lW3NhcHBseShuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0Kc2Rfcm93X25ld29yZCA8LSBjb2xTZHMoYXMubWF0cml4KG5ld29yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkNCm5ld29yZGVyc19tbXYxIDwtIG5ld29yZGVyc19kYXRhZnJhbWVfdGltZSAlPiUgcmJpbmQobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lLCBtZWFuX3Jvd19uZXdvcmQpDQpuZXdvcmRlcnNfbW12MiA8LSBuZXdvcmRlcnNfbW12MSAlPiUgcmJpbmQobmV3b3JkZXJzX21tdjEsIG1lZGlhbl9yb3dfbmV3b3JkKQ0KbmV3b3JkZXJzX21tdiA8LSBuZXdvcmRlcnNfbW12MiAlPiUgcmJpbmQobmV3b3JkZXJzX21tdjIsIHNkX3Jvd19uZXdvcmQpDQpuZXdvcmRlcnNfbW12W25yb3cobmV3b3JkZXJzX21tdiktMixuY29sKG5ld29yZGVyc19tbXYpXSA8LSAiTWVhbiINCm5ld29yZGVyc19tbXZbbnJvdyhuZXdvcmRlcnNfbW12KS0xLG5jb2wobmV3b3JkZXJzX21tdildIDwtICJNZWRpYW4iDQpuZXdvcmRlcnNfbW12W25yb3cobmV3b3JkZXJzX21tdiksbmNvbChuZXdvcmRlcnNfbW12KV0gPC0gIlN0YW5kYXJkIERldmlhdGlvbiINCnRhaWwobmV3b3JkZXJzX21tdiwxMCkNCmBgYA0KYGBge3J9DQptZWFuX3Jvd191bmZpbGxvcmQgPC0gY29sTWVhbnModW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKQ0KbWVkaWFuX3Jvd191bmZpbGxvcmQgPC0gY29sTWVkaWFucyhhcy5tYXRyaXgodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkNCnNkX3Jvd191bmZpbGxvcmQgPC0gY29sU2RzKGFzLm1hdHJpeCh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0KdW5maWxsb3JkX21tdjEgPC0gdW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUgJT4lIHJiaW5kKHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZV90aW1lLCBtZWFuX3Jvd191bmZpbGxvcmQpDQp1bmZpbGxvcmRfbW12MiA8LSB1bmZpbGxvcmRfbW12MSAlPiUgcmJpbmQodW5maWxsb3JkX21tdjEsIG1lZGlhbl9yb3dfdW5maWxsb3JkKQ0KdW5maWxsb3JkX21tdiA8LSB1bmZpbGxvcmRfbW12MiAlPiUgcmJpbmQodW5maWxsb3JkX21tdjIsIHNkX3Jvd191bmZpbGxvcmQpDQp1bmZpbGxvcmRfbW12W25yb3codW5maWxsb3JkX21tdiktMixuY29sKHVuZmlsbG9yZF9tbXYpXSA8LSAiTWVhbiINCnVuZmlsbG9yZF9tbXZbbnJvdyh1bmZpbGxvcmRfbW12KS0xLG5jb2wodW5maWxsb3JkX21tdildIDwtICJNZWRpYW4iDQp1bmZpbGxvcmRfbW12W25yb3codW5maWxsb3JkX21tdiksbmNvbCh1bmZpbGxvcmRfbW12KV0gPC0gIlN0YW5kYXJkIERldmlhdGlvbiINCnRhaWwodW5maWxsb3JkX21tdiwxMCkNCmBgYA0KYGBge3J9DQptZWFuX3Jvd190b3RhbGludiA8LSBjb2xNZWFucyh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKQ0KbWVkaWFuX3Jvd190b3RhbGludiA8LSBjb2xNZWRpYW5zKGFzLm1hdHJpeCh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkNCnNkX3Jvd190b3RhbGludiA8LSBjb2xTZHMoYXMubWF0cml4KHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHRvdGFsaW52ZW50b3JpZXNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0KdG90YWxpbnZfbW12MSA8LSB0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lICU+JSByYmluZCh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lLCBtZWFuX3Jvd190b3RhbGludikNCnRvdGFsaW52X21tdjIgPC0gdG90YWxpbnZfbW12MSAlPiUgcmJpbmQodG90YWxpbnZfbW12MSwgbWVkaWFuX3Jvd190b3RhbGludikNCnRvdGFsaW52X21tdiA8LSB0b3RhbGludl9tbXYyICU+JSByYmluZCh0b3RhbGludl9tbXYyLCBzZF9yb3dfdG90YWxpbnYpDQp0b3RhbGludl9tbXZbbnJvdyh0b3RhbGludl9tbXYpLTIsbmNvbCh0b3RhbGludl9tbXYpXSA8LSAiTWVhbiINCnRvdGFsaW52X21tdltucm93KHRvdGFsaW52X21tdiktMSxuY29sKHRvdGFsaW52X21tdildIDwtICJNZWRpYW4iDQp0b3RhbGludl9tbXZbbnJvdyh0b3RhbGludl9tbXYpLG5jb2wodG90YWxpbnZfbW12KV0gPC0gIlN0YW5kYXJkIERldmlhdGlvbiINCnRhaWwodG90YWxpbnZfbW12LDEwKQ0KYGBgDQpgYGB7cn0NCm1lYW5fcm93X2ludnRvc2hpcCA8LSBjb2xNZWFucyhpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKQ0KbWVkaWFuX3Jvd19pbnZ0b3NoaXAgPC0gY29sTWVkaWFucyhhcy5tYXRyaXgoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQpzZF9yb3dfaW52dG9zaGlwIDwtIGNvbFNkcyhhcy5tYXRyaXgoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpDQppbnZ0b3NoaXBfbW12MSA8LSBpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lICU+JSByYmluZChpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBtZWFuX3Jvd19pbnZ0b3NoaXApDQppbnZ0b3NoaXBfbW12MiA8LSBpbnZ0b3NoaXBfbW12MSAlPiUgcmJpbmQoaW52dG9zaGlwX21tdjEsIG1lZGlhbl9yb3dfaW52dG9zaGlwKQ0KaW52dG9zaGlwX21tdiA8LSBpbnZ0b3NoaXBfbW12MiAlPiUgcmJpbmQoaW52dG9zaGlwX21tdjIsIHNkX3Jvd19pbnZ0b3NoaXApDQppbnZ0b3NoaXBfbW12W25yb3coaW52dG9zaGlwX21tdiktMixuY29sKGludnRvc2hpcF9tbXYpXSA8LSAiTWVhbiINCmludnRvc2hpcF9tbXZbbnJvdyhpbnZ0b3NoaXBfbW12KS0xLG5jb2woaW52dG9zaGlwX21tdildIDwtICJNZWRpYW4iDQppbnZ0b3NoaXBfbW12W25yb3coaW52dG9zaGlwX21tdiksbmNvbChpbnZ0b3NoaXBfbW12KV0gPC0gIlN0YW5kYXJkIERldmlhdGlvbiINCnRhaWwoaW52dG9zaGlwX21tdiwxMCkNCmBgYA0KYGBge3J9DQptZWFuX3Jvd191bmZpbGx0b3NoaXAgPC0gY29sTWVhbnModW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldLG5hLnJtID0gVFJVRSkNCm1lZGlhbl9yb3dfdW5maWxsdG9zaGlwIDwtIGNvbE1lZGlhbnMoYXMubWF0cml4KHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0Kc2Rfcm93X3VuZmlsbHRvc2hpcCA8LSBjb2xTZHMoYXMubWF0cml4KHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKQ0KdW5maWxsdG9zaGlwX21tdjEgPC0gdW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSAlPiUgcmJpbmQodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgbWVhbl9yb3dfdW5maWxsdG9zaGlwKQ0KdW5maWxsdG9zaGlwX21tdjIgPC0gdW5maWxsdG9zaGlwX21tdjEgJT4lIHJiaW5kKHVuZmlsbHRvc2hpcF9tbXYxLCBtZWRpYW5fcm93X3VuZmlsbHRvc2hpcCkNCnVuZmlsbHRvc2hpcF9tbXYgPC0gdW5maWxsdG9zaGlwX21tdjIgJT4lIHJiaW5kKHVuZmlsbHRvc2hpcF9tbXYyLCBzZF9yb3dfdW5maWxsdG9zaGlwKQ0KdW5maWxsdG9zaGlwX21tdltucm93KHVuZmlsbHRvc2hpcF9tbXYpLTIsbmNvbCh1bmZpbGx0b3NoaXBfbW12KV0gPC0gIk1lYW4iDQp1bmZpbGx0b3NoaXBfbW12W25yb3codW5maWxsdG9zaGlwX21tdiktMSxuY29sKHVuZmlsbHRvc2hpcF9tbXYpXSA8LSAiTWVkaWFuIg0KdW5maWxsdG9zaGlwX21tdltucm93KHVuZmlsbHRvc2hpcF9tbXYpLG5jb2wodW5maWxsdG9zaGlwX21tdildIDwtICJTdGFuZGFyZCBEZXZpYXRpb24iDQp0YWlsKHVuZmlsbHRvc2hpcF9tbXYsMTApDQpgYGANCmBgYHtyfQ0Kc2hpcG1lbnRfbWVhbnMgPC0gc2hpcG1lbnRzX21tdiAlPiUgZmlsdGVyKHNoaXBtZW50c19tbXYkRGF0ZSA9PSAiTWVhbiIpICU+JSBzZWxlY3RfaWYoLiA+PSAzMDAwMDApDQpzaGlwbWVudF9tZWFucw0KYGBgDQpgYGB7cn0NCkFNVE1WUyA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdiRBTVRNVlMsIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCkFNWFRWUyA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdiRBTVhUVlMsIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCkFNWERWUyA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdiRBTVhEVlMsIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCnRzLnBsb3QoQU1UTVZTLCBBTVhUVlMsIEFNWERWUywgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6MykpLCBjb2w9cmVwKGMoInJlZCIsImJsdWUiLCJncmVlbiIpKSkNCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoIkFNVE1WUyIsIkFNWFRWUyIsIkFNWERWUyIpLCBjb2wgPSBjKCJyZWQiLCJibHVlIiwiZ3JlZW4iKSwgbHR5PWMoMTozKSkNCmBgYA0KYGBge3J9DQpzaGlwbWVudHNfb3JkZXIgPC0gb3JkZXIoY29sTWVhbnMoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSxuYS5ybSA9IFRSVUUpKQ0Kc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW4gPC0gc2hpcG1lbnRzX21tdiAlPiUgc2VsZWN0KGFsbF9vZihzaGlwbWVudHNfb3JkZXIpLCBuY29sKHNoaXBtZW50c19tbXYpKQ0Kc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqIDwtIHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzg3IENvbHVtbnMNCnNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqIDwtIHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzg3IENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0Niw1MSw1Niw2MSw2Niw3MSw3Niw4MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX2FkailbaV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzFdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX2FkailbaSsyXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krM10sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2ldLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzFdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzJdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KDQpgYGB7cn0NCm5ld29yZGVyc19vcmRlciA8LSBvcmRlcihjb2xNZWFucyhuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KG5ld29yZGVyc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldLG5hLnJtID0gVFJVRSkpDQpuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbiA8LSBuZXdvcmRlcnNfbW12ICU+JSBzZWxlY3QoYWxsX29mKG5ld29yZGVyc19vcmRlciksIG5jb2wobmV3b3JkZXJzX21tdikpDQpuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGogPC0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjNTIgQ29sdW1ucw0KbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGogPC0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjNTIgQ29sdW1ucw0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2KSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMV0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzJdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkailbaSszXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaV0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMV0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMl0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krM10sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KdW5maWxsZWRvcmRlcnNfb3JkZXIgPC0gb3JkZXIoY29sTWVhbnModW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHVuZmlsbGVkb3JkZXJzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0sbmEucm0gPSBUUlVFKSkNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW4gPC0gdW5maWxsb3JkX21tdiAlPiUgc2VsZWN0KGFsbF9vZih1bmZpbGxlZG9yZGVyc19vcmRlciksIG5jb2wodW5maWxsb3JkX21tdikpDQp1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkaiA8LSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzUwIENvbHVtbnMNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGogPC0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM1MiBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl9hZGopW2ldLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzFdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2ldLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSsyXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KdG90YWxpbnZfb3JkZXIgPC0gb3JkZXIoY29sTWVhbnModG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldLG5hLnJtID0gVFJVRSkpDQp0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuIDwtIHRvdGFsaW52X21tdiAlPiUgc2VsZWN0KGFsbF9vZih0b3RhbGludl9vcmRlciksIG5jb2wodG90YWxpbnZfbW12KSkNCnRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fYWRqIDwtIHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjMTU4IENvbHVtbnMNCnRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fdW5hZGogPC0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICMxNTggQ29sdW1ucw0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2LDUxLDU2LDYxLDY2LDcxLDc2LDgxLDg2LDkxLDk2LDEwMSwxMDYsMTExLDExNiwxMjEsMTI2LDEzMSwxMzYsMTQxLDE0NiwxNTEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl9hZGopW2ldLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzFdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzJdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzNdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEsODYsOTEsOTYsMTAxLDEwNiwxMTEsMTE2LDEyMSwxMjYsMTMxLDEzNiwxNDEsMTQ2LDE1MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkailbaV0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSsxXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzJdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krM10sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCg0KYGBge3J9DQppbnZ0b3NoaXBfb3JkZXIgPC0gb3JkZXIoY29sTWVhbnMoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkoaW52ZW50b3JpZXN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldLG5hLnJtID0gVFJVRSkpDQppbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbiA8LSBpbnZ0b3NoaXBfbW12ICU+JSBzZWxlY3QoYWxsX29mKGludnRvc2hpcF9vcmRlciksIG5jb2woaW52dG9zaGlwX21tdikpDQppbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGogPC0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnQScpKSAjMjQgQ29sdW1ucw0KaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGogPC0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjMjQgQ29sdW1ucw0KZm9yIChpIGluIGMoMSw2LDExLDE2KSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMV0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzJdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkailbaSszXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEsNiwxMSwxNikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkailbaV0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMV0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krMl0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krM10sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KdW5maWxsdG9zaGlwX29yZGVyIDwtIG9yZGVyKGNvbE1lYW5zKHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHVuZmlsbGVkb3JkZXJzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSxuYS5ybSA9IFRSVUUpKQ0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW4gPC0gdW5maWxsdG9zaGlwX21tdiAlPiUgc2VsZWN0KGFsbF9vZih1bmZpbGx0b3NoaXBfb3JkZXIpLCBuY29sKHVuZmlsbHRvc2hpcF9tbXYpKQ0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqIDwtIHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzkgQ29sdW1ucw0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGogPC0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjOSBDb2x1bW5zDQpmb3IgKGkgaW4gYygxKSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGopW2krMV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX2FkailbaSszXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVhbl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lYW5fdW5hZGopW2ldLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzFdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWFuX3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpzaGlwbWVudHNfb3JkZXJfbWVkIDwtIG9yZGVyKGNvbE1lZGlhbnMoYXMubWF0cml4KHNoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkoc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkpDQpzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuIDwtIHNoaXBtZW50c19tbXYgJT4lIHNlbGVjdChhbGxfb2Yoc2hpcG1lbnRzX29yZGVyX21lZCksIG5jb2woc2hpcG1lbnRzX21tdikpDQpzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX2FkaiA8LSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzg3IENvbHVtbnMNCnNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGogPC0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM4NyBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2ldLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzFdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzJdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzNdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2ldLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krMV0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsyXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCm5ld29yZGVyc19vcmRlcl9tZWQgPC0gb3JkZXIoY29sTWVhbnMoYXMubWF0cml4KG5ld29yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkpDQpuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuIDwtIG5ld29yZGVyc19tbXYgJT4lIHNlbGVjdChhbGxfb2YobmV3b3JkZXJzX29yZGVyX21lZCksIG5jb2wobmV3b3JkZXJzX21tdikpDQpuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkaiA8LSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzUyIENvbHVtbnMNCm5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGogPC0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM1MiBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2ldLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzFdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzJdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzNdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2ldLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krMV0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsyXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCnVuZmlsbGVkb3JkZXJzX29yZGVyX21lZCA8LSBvcmRlcihjb2xNZWRpYW5zKGFzLm1hdHJpeCh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKSkNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbiA8LSB1bmZpbGxvcmRfbW12ICU+JSBzZWxlY3QoYWxsX29mKHVuZmlsbGVkb3JkZXJzX29yZGVyX21lZCksIG5jb2wodW5maWxsb3JkX21tdikpDQp1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqIDwtIHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdBJykpICM1MCBDb2x1bW5zDQp1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGogPC0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzUyIENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0NikpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaSsxXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krM10sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2KSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krMV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSszXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCnRvdGFsaW52X29yZGVyX21lZCA8LSBvcmRlcihjb2xNZWRpYW5zKGFzLm1hdHJpeCh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lW3NhcHBseSh0b3RhbGludmVudG9yaWVzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkpDQp0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW4gPC0gdG90YWxpbnZfbW12ICU+JSBzZWxlY3QoYWxsX29mKHRvdGFsaW52X29yZGVyX21lZCksIG5jb2wodG90YWxpbnZfbW12KSkNCnRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl9hZGogPC0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzE1OCBDb2x1bW5zDQp0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGogPC0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ1UnKSkgIzE1OCBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEsODYsOTEsOTYsMTAxLDEwNiwxMTEsMTE2LDEyMSwxMjYsMTMxLDEzNiwxNDEsMTQ2LDE1MSkpDQp7DQogIFNlcmllczEgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaSsyXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM0IDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaV0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaSsxXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzJdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2krM10sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2LDUxLDU2LDYxLDY2LDcxLDc2LDgxLDg2LDkxLDk2LDEwMSwxMDYsMTExLDExNiwxMjEsMTI2LDEzMSwxMzYsMTQxLDE0NiwxNTEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2ldLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsxXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krMl0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KaW52dG9zaGlwX29yZGVyX21lZCA8LSBvcmRlcihjb2xNZWRpYW5zKGFzLm1hdHJpeChpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lW3NhcHBseShpbnZlbnRvcmllc3Rvc2hpcG1lbnRzX2RhdGFmcmFtZV90aW1lLCBpcy5udW1lcmljKV0pLG5hLnJtID0gVFJVRSkpDQppbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuIDwtIGludnRvc2hpcF9tbXYgJT4lIHNlbGVjdChhbGxfb2YoaW52dG9zaGlwX29yZGVyX21lZCksIG5jb2woaW52dG9zaGlwX21tdikpDQppbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkaiA8LSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzI0IENvbHVtbnMNCmludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGogPC0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICMyNCBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2ldLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzFdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzJdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzNdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2ldLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krMV0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSsyXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzNdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCnVuZmlsbHRvc2hpcF9vcmRlcl9tZWQgPC0gb3JkZXIoY29sTWVkaWFucyhhcy5tYXRyaXgodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpKQ0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbiA8LSB1bmZpbGx0b3NoaXBfbW12ICU+JSBzZWxlY3QoYWxsX29mKHVuZmlsbHRvc2hpcF9vcmRlcl9tZWQpLCBuY29sKHVuZmlsbHRvc2hpcF9tbXYpKQ0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGogPC0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdBJykpICM5IENvbHVtbnMNCnVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGogPC0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM5IENvbHVtbnMNCmZvciAoaSBpbiBjKDEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl9hZGopW2ldLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzFdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxKSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzFdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9tZWRpYW5fdW5hZGopW2krMl0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX21lZGlhbl91bmFkailbaSszXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfbWVkaWFuX3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpzaGlwbWVudHNfb3JkZXJfc2QgPC0gb3JkZXIoY29sU2RzKGFzLm1hdHJpeChzaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KHNoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpKQ0Kc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXYgPC0gc2hpcG1lbnRzX21tdiAlPiUgc2VsZWN0KGFsbF9vZihzaGlwbWVudHNfb3JkZXJfc2QpLCBuY29sKHNoaXBtZW50c19tbXYpKQ0Kc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqIDwtIHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzkgQ29sdW1ucw0Kc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGogPC0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXYgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjOSBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYsNTEsNTYsNjEsNjYsNzEsNzYsODEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2ldLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsxXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krMl0sY29sbmFtZXMoc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzNdLGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2LDUxLDU2LDYxLDY2LDcxLDc2LDgxKSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gc2hpcG1lbnRzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHNoaXBtZW50c19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsxXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsyXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSszXSxjb2xuYW1lcyhzaGlwbWVudHNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KbmV3b3JkZXJzX29yZGVyX3NkIDwtIG9yZGVyKGNvbFNkcyhhcy5tYXRyaXgobmV3b3JkZXJzX2RhdGFmcmFtZV90aW1lW3NhcHBseShuZXdvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKSkNCm5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2IDwtIG5ld29yZGVyc19tbXYgJT4lIHNlbGVjdChhbGxfb2YobmV3b3JkZXJzX29yZGVyX3NkKSwgbmNvbChuZXdvcmRlcnNfbW12KSkNCm5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkaiA8LSBuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdBJykpICM1MiBDb2x1bW5zDQpuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkaiA8LSBuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM1MiBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2ldLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsxXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krMl0sY29sbmFtZXMobmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzNdLGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2KSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gbmV3b3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKG5ld29yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsxXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsyXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSszXSxjb2xuYW1lcyhuZXdvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KdW5maWxsZWRvcmRlcnNfb3JkZXJfc2QgPC0gb3JkZXIoY29sU2RzKGFzLm1hdHJpeCh1bmZpbGxlZG9yZGVyc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKSkNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXYgPC0gdW5maWxsb3JkX21tdiAlPiUgc2VsZWN0KGFsbF9vZih1bmZpbGxlZG9yZGVyc19vcmRlcl9zZCksIG5jb2wodW5maWxsb3JkX21tdikpDQp1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkaiA8LSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzUwIENvbHVtbnMNCnVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGogPC0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICM1MiBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2ldLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzFdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KYGBge3J9DQpmb3IgKGkgaW4gYygxLDYsMTEsMTYsMjEsMjYsMzEsMzYsNDEsNDYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2ldLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krMV0sY29sbmFtZXModW5maWxsZWRvcmRlcnNfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsyXSxjb2xuYW1lcyh1bmZpbGxlZG9yZGVyc19tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbGVkb3JkZXJzX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCnRvdGFsaW52X29yZGVyX3NkIDwtIG9yZGVyKGNvbFNkcyhhcy5tYXRyaXgodG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVfdGltZVtzYXBwbHkodG90YWxpbnZlbnRvcmllc19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpKQ0KdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldiA8LSB0b3RhbGludl9tbXYgJT4lIHNlbGVjdChhbGxfb2YodG90YWxpbnZfb3JkZXJfc2QpLCBuY29sKHRvdGFsaW52X21tdikpDQp0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkaiA8LSB0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzE1OCBDb2x1bW5zDQp0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqIDwtIHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXYgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjMTU4IENvbHVtbnMNCmZvciAoaSBpbiBjKDEsNiwxMSwxNiwyMSwyNiwzMSwzNiw0MSw0Niw1MSw1Niw2MSw2Niw3MSw3Niw4MSw4Niw5MSw5NiwxMDEsMTA2LDExMSwxMTYsMTIxLDEyNiwxMzEsMTM2LDE0MSwxNDYsMTUxKSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsxXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsyXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSszXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSw2LDExLDE2LDIxLDI2LDMxLDM2LDQxLDQ2LDUxLDU2LDYxLDY2LDcxLDc2LDgxLDg2LDkxLDk2LDEwMSwxMDYsMTExLDExNiwxMjEsMTI2LDEzMSwxMzYsMTQxLDE0NiwxNTEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2ldLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krMV0sY29sbmFtZXModG90YWxpbnZfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsyXSxjb2xuYW1lcyh0b3RhbGludl9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzNdLGNvbG5hbWVzKHRvdGFsaW52X21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmludnRvc2hpcF9vcmRlcl9zZCA8LSBvcmRlcihjb2xTZHMoYXMubWF0cml4KGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWVbc2FwcGx5KGludmVudG9yaWVzdG9zaGlwbWVudHNfZGF0YWZyYW1lX3RpbWUsIGlzLm51bWVyaWMpXSksbmEucm0gPSBUUlVFKSkNCmludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2IDwtIGludnRvc2hpcF9tbXYgJT4lIHNlbGVjdChhbGxfb2YoaW52dG9zaGlwX29yZGVyX3NkKSwgbmNvbChpbnZ0b3NoaXBfbW12KSkNCmludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkaiA8LSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdBJykpICMyNCBDb2x1bW5zDQppbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkaiA8LSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldiAlPiUgc2VsZWN0KHN0YXJ0c193aXRoKCdVJykpICMyNCBDb2x1bW5zDQpmb3IgKGkgaW4gYygxLDYsMTEsMTYpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSsxXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMzIDwtIHRzKGRhdGEgPSBpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSs0XSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICB0cy5wbG90KFNlcmllczEsIFNlcmllczIsIFNlcmllczMsIFNlcmllczQsIFNlcmllczUsIGdwYXJzPWxpc3QoeGxhYj0iWWVhciIsIHlsYWI9IlZhbHVlIixsdHk9YygxOjUpKSwgY29sPXJlcChjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpKSkNCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2ldLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSsxXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krMl0sY29sbmFtZXMoaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzNdLGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KZm9yIChpIGluIGMoMSw2LDExLDE2KSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gaW52dG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGldLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczIgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzFdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczMgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzNdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczUgPC0gdHMoZGF0YSA9IGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqWyxpKzRdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIHRzLnBsb3QoU2VyaWVzMSwgU2VyaWVzMiwgU2VyaWVzMywgU2VyaWVzNCwgU2VyaWVzNSwgZ3BhcnM9bGlzdCh4bGFiPSJZZWFyIiwgeWxhYj0iVmFsdWUiLGx0eT1jKDE6NSkpLCBjb2w9cmVwKGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIikpKQ0KICBsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKGNvbG5hbWVzKGludnRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsxXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSsyXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSszXSxjb2xuYW1lcyhpbnZ0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkailbaSs0XSksIGNvbCA9IGMoInJlZCIsInB1cnBsZSIsImJsYWNrIiwiZ3JlZW4iLCJibHVlIiksIGx0eT1jKDE6NCkpDQp9DQpgYGANCmBgYHtyfQ0KdW5maWxsdG9zaGlwX29yZGVyX3NkIDwtIG9yZGVyKGNvbFNkcyhhcy5tYXRyaXgodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZVtzYXBwbHkodW5maWxsZWRvcmRlcnN0b3NoaXBtZW50c19kYXRhZnJhbWVfdGltZSwgaXMubnVtZXJpYyldKSxuYS5ybSA9IFRSVUUpKQ0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXYgPC0gdW5maWxsdG9zaGlwX21tdiAlPiUgc2VsZWN0KGFsbF9vZih1bmZpbGx0b3NoaXBfb3JkZXJfc2QpLCBuY29sKHVuZmlsbHRvc2hpcF9tbXYpKQ0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqIDwtIHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2ICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoJ0EnKSkgIzkgQ29sdW1ucw0KdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGogPC0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXYgJT4lIHNlbGVjdChzdGFydHNfd2l0aCgnVScpKSAjOSBDb2x1bW5zDQpmb3IgKGkgaW4gYygxKSkNCnsNCiAgU2VyaWVzMSA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXMyIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqWyxpKzJdLCBzdGFydD1jKDE5OTIpLCBlbmQ9YygyMDIxKSwgZnJlcXVlbmN5ID0gMTIpDQogIFNlcmllczQgPC0gdHMoZGF0YSA9IHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkalssaSszXSwgc3RhcnQ9YygxOTkyKSwgZW5kPWMoMjAyMSksIGZyZXF1ZW5jeSA9IDEyKQ0KICBTZXJpZXM1IDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krMV0sY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X2FkailbaSszXSxjb2xuYW1lcyh1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl9hZGopW2krNF0pLCBjb2wgPSBjKCJyZWQiLCJwdXJwbGUiLCJibGFjayIsImdyZWVuIiwiYmx1ZSIpLCBsdHk9YygxOjQpKQ0KfQ0KYGBgDQpgYGB7cn0NCmZvciAoaSBpbiBjKDEpKQ0Kew0KICBTZXJpZXMxIDwtIHRzKGRhdGEgPSB1bmZpbGx0b3NoaXBfbW12X29yZGVyZWRfc3RhbmRldl91bmFkalssaV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMiA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMV0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzMyA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrMl0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNCA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrM10sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgU2VyaWVzNSA8LSB0cyhkYXRhID0gdW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGpbLGkrNF0sIHN0YXJ0PWMoMTk5MiksIGVuZD1jKDIwMjEpLCBmcmVxdWVuY3kgPSAxMikNCiAgdHMucGxvdChTZXJpZXMxLCBTZXJpZXMyLCBTZXJpZXMzLCBTZXJpZXM0LCBTZXJpZXM1LCBncGFycz1saXN0KHhsYWI9IlllYXIiLCB5bGFiPSJWYWx1ZSIsbHR5PWMoMTo1KSksIGNvbD1yZXAoYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSkpDQogIGxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoY29sbmFtZXModW5maWxsdG9zaGlwX21tdl9vcmRlcmVkX3N0YW5kZXZfdW5hZGopW2ldLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzFdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzJdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzNdLGNvbG5hbWVzKHVuZmlsbHRvc2hpcF9tbXZfb3JkZXJlZF9zdGFuZGV2X3VuYWRqKVtpKzRdKSwgY29sID0gYygicmVkIiwicHVycGxlIiwiYmxhY2siLCJncmVlbiIsImJsdWUiKSwgbHR5PWMoMTo0KSkNCn0NCmBgYA0KDQoNCg==